package datasource

import (
	"fmt"
	"io/ioutil"

	"web/models"

	_ "github.com/go-sql-driver/mysql"
	"github.com/jinzhu/gorm"
	"github.com/json-iterator/go"
)

var dbConfig = new(DataSource)
var db *gorm.DB

func GetDB() *gorm.DB {
	return db
}

func init() {
	b, err := ioutil.ReadFile("conf/datasource.json")
	if err != nil {
		panic("DB config read err")
	}
	err = jsoniter.Unmarshal(b, dbConfig)
	if err != nil {
		panic(err)
	}

	dsn := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=utf8&parseTime=True",
		dbConfig.UserName, dbConfig.Passwd,
		dbConfig.Host, dbConfig.Port, dbConfig.DbName)

	db, err = gorm.Open("mysql", dsn)
	if err != nil {
		panic(err)
	}

	db.DB().SetMaxIdleConns(20)   //最大打开的连接数
	db.DB().SetMaxOpenConns(1000) //设置最大闲置个数
	db.SingularTable(true)        //表生成结尾不带s
	// 启用Logger，显示详细日志
	// db.LogMode(true)
	createTable()
}

// 初始化表 如果不存在该表 则自动创建
func createTable() {
	db.AutoMigrate(&models.User{})
}

type DataSource struct {
	Host     string `json:"host"`
	Port     int    `json:"port"`
	UserName string `json:"user"`
	Passwd   string `json:"passwd"`
	DbName   string `json:"db"`
}
